﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;
using System.Globalization;

///Author: NHDuc 
///Created date: 29/11/2013
namespace VietThuongLMS.Areas.Admin.Models
{
    [PropertiesMustMatch("MatKhau", "XacNhanMatKhau", ErrorMessage = "Mật khẩu và mật khẩu xác nhận không giống nhau.")]
    public class DangKyModel
    {
        #region Step 1
        [Required(ErrorMessage = "(*) Phần 1: Tên tài khoản không được để trống")]
        public string MaTaiKhoan { get; set; }
        [Required(ErrorMessage = "(*) Phần 1: Mật khẩu không được để trống")]
        public string MatKhau { get; set; }
        [Required(ErrorMessage = "(*) Phần 1: Xác nhận mật khẩu không được để trống")]
        public string XacNhanMatKhau { get; set; }

        [Required(ErrorMessage = "(*) Phần 1: Họ tên không được để trống")]
        public string HoTen { get; set; }

        public string GioiTinh { get; set; }

        //[Required(ErrorMessage = "(*) Ngày sinh không được để trống")]
        public string NgaySinh { get; set; }

        public string NgheNghiep { get; set; }
        public string NoiCongTac { get; set; }
        public string Lop { get; set; }

        [Required(ErrorMessage = "(*) Phần 1: Địa chỉ không được để trống")]
        public string DiaChi { get; set; }
        [Required(ErrorMessage = "(*) Phần 1: Điện thoại không được để trống")]
        public string DienThoai { get; set; }
        [Required(ErrorMessage = "(*) Phần 1: Email không được để trống")]
        public string Email { get; set; }
        #endregion

        #region Step 2
        [Required(ErrorMessage = "(*) Phần 2: Họ tên người liên hệ không được để trống")]
        public string HoTenLienHe { get; set; }
        [Required(ErrorMessage = "(*) Phần 2: Mối quan")]
        public string MoiQuanHe { get; set; }
        [Required(ErrorMessage = "(*) Phần 2: Địa chỉ người liên hệ không được để trống")]
        public string DiaChiNguoiLienHe { get; set; }
        [Required(ErrorMessage = "(*) Phần 2: Điện thoại người liên hệ không được để trống")]
        public string DienThoaiNguoiLienHe { get; set; }
        [Required(ErrorMessage = "(*) Phần 2: Email người liên hệ không được để trống")]
        public string EmailNguoiLienHe { get; set; }
        #endregion

        #region Step 3
        public string NhacCu1 { get; set; }
        public string SoNamHoc1 { get; set; }
        public string GiaoVienHienTai1 { get; set; }
        public string NhacCu2 { get; set; }
        public string SoNamHoc2 { get; set; }
        public string GiaoVienHienTai2 { get; set; }

        public int DaBieuDien { get; set; }
        public int ThamGiaBanNhac { get; set; }
        public string BanNhac { get; set; }
        public string VaiTro { get; set; }
        public string SoThanhVien { get; set; }
        #endregion

        #region Step 4
        public string NgonNgu { get; set; }
        public int LoaiLopHoc { get; set; }
        [Required(ErrorMessage = "(*) Phần 4: Ngày bắt đầu học không được để trống")]
        public string NgayBatDauHoc { get; set; }
        public string TGH_2 { get; set; }
        public string TGH_3 { get; set; }
        public string TGH_4 { get; set; }
        public string TGH_5 { get; set; }
        public string TGH_6 { get; set; }
        public string TGH_7 { get; set; }
        public string TGH_CN { get; set; }

        //chuyen de
        public bool CD_GuitarThung { get; set; }
        public bool CD_GuitarDien { get; set; }
        public bool CD_GuitarBass { get; set; }
        public bool CD_Piano { get; set; }
        public bool CD_NhacLy { get; set; }
        public bool CD_Violin { get; set; }
        public bool CD_Viola { get; set; }
        public bool CD_Clarinet { get; set; }
        public bool CD_Saxophone { get; set; }
        public bool CD_ChuyenDeKhac { get; set; }
        public bool CD_Flute { get; set; }
        public bool CD_ThanhNhac { get; set; }
        public bool CD_Keyboard { get; set; }
        public bool CD_Trong { get; set; }

        //the loai nhac yeu thich
        public bool YT_CoDien { get; set; }
        public bool YT_RB { get; set; }
        public bool YT_Dance { get; set; }
        public bool YT_Pop { get; set; }
        public bool YT_Blue { get; set; }
        public bool YT_Rock { get; set; }
        public bool YT_Jazz { get; set; }
        public bool YT_Techno { get; set; }
        public bool YT_Khac { get; set; }

        public bool BD_DamDong { get; set; }
        public bool BD_HocChoVui { get; set; }
        public bool BD_ChuyenNghiep { get; set; }
        public bool BD_Khac { get; set; }

        public string ThanTuong { get; set; }
        #endregion

        #region Step 5
        public int ChiNhanh { get; set; }

        [Required]
        [Boolean(Value = true, ErrorMessage = "(*) Phần 5: Bạn phải đồng ý với quy định của trường.")]
        public bool AcceptsTerms { get; set; }
        #endregion

        #region Step 6
        public int HinhThuc { get; set; }
        #endregion
    }

    #region Validation
    [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
    public sealed class PropertiesMustMatchAttribute : ValidationAttribute
    {
        private const string _defaultErrorMessage = "'{0}' và '{1}' không giống nhau.";

        private readonly object _typeId = new object();

        public PropertiesMustMatchAttribute(string originalProperty, string confirmProperty)
            : base(_defaultErrorMessage)
        {
            OriginalProperty = originalProperty;
            ConfirmProperty = confirmProperty;
        }

        public string ConfirmProperty
        {
            get;
            private set;
        }

        public string OriginalProperty
        {
            get;
            private set;
        }

        public override object TypeId
        {
            get
            {
                return _typeId;
            }
        }

        public override string FormatErrorMessage(string name)
        {
            return String.Format(CultureInfo.CurrentUICulture, ErrorMessageString,
                OriginalProperty, ConfirmProperty);
        }

        public override bool IsValid(object value)
        {
            PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(value);
            object originalValue = properties.Find(OriginalProperty, true /* ignoreCase */).GetValue(value);
            object confirmValue = properties.Find(ConfirmProperty, true /* ignoreCase */).GetValue(value);
            return Object.Equals(originalValue, confirmValue);
        }
    }
    #endregion

    public class DangKyThemModel
    {
        #region Step 4
        public string NgonNgu { get; set; }
        public int LoaiLopHoc { get; set; }
        [Required(ErrorMessage = "(*) Phần 4: Ngày bắt đầu học không được để trống")]
        public string NgayBatDauHoc { get; set; }
        public string TGH_2 { get; set; }
        public string TGH_3 { get; set; }
        public string TGH_4 { get; set; }
        public string TGH_5 { get; set; }
        public string TGH_6 { get; set; }
        public string TGH_7 { get; set; }
        public string TGH_CN { get; set; }

        //chuyen de
        public bool CD_GuitarThung { get; set; }
        public bool CD_GuitarDien { get; set; }
        public bool CD_GuitarBass { get; set; }
        public bool CD_Piano { get; set; }
        public bool CD_NhacLy { get; set; }
        public bool CD_Violin { get; set; }
        public bool CD_Viola { get; set; }
        public bool CD_Clarinet { get; set; }
        public bool CD_Saxophone { get; set; }
        public bool CD_ChuyenDeKhac { get; set; }
        public bool CD_Flute { get; set; }
        public bool CD_ThanhNhac { get; set; }
        public bool CD_Keyboard { get; set; }
        public bool CD_Trong { get; set; }
        #endregion

        #region Step 5
        public int ChiNhanh { get; set; }
        [Required]
        [Boolean(Value = true, ErrorMessage = "(*) Phần 5: Bạn phải đồng ý với quy định của trường.")]
        public bool AcceptsTerms { get; set; }
        #endregion

        #region Step 6
        public int HinhThuc { get; set; }
        #endregion
    }

    public class CapNhatHocVienModel
    {
        #region Step 1
        public string id { get; set; }
        [Required(ErrorMessage = "(*) Phần 1: Họ tên không được để trống")]
        public string HoTen { get; set; }
        public string NgaySinh { get; set; }
        public string NgheNghiep { get; set; }
        public string NoiCongTac { get; set; }

        [Required(ErrorMessage = "(*) Phần 1: Địa chỉ không được để trống")]
        public string DiaChi { get; set; }
        [Required(ErrorMessage = "(*) Phần 1: Điện thoại không được để trống")]
        public string DienThoai { get; set; }
        [Required(ErrorMessage = "(*) Phần 1: Email không được để trống")]
        public string Email { get; set; }
        #endregion

        #region Step 2
        [Required(ErrorMessage = "(*) Phần 2: Họ tên người liên hệ không được để trống")]
        public string HoTenLienHe { get; set; }
        [Required(ErrorMessage = "(*) Phần 2: Mối quan")]
        public string MoiQuanHe { get; set; }
        [Required(ErrorMessage = "(*) Phần 2: Địa chỉ người liên hệ không được để trống")]
        public string DiaChiNguoiLienHe { get; set; }
        [Required(ErrorMessage = "(*) Phần 2: Điện thoại người liên hệ không được để trống")]
        public string DienThoaiNguoiLienHe { get; set; }
        [Required(ErrorMessage = "(*) Phần 2: Email người liên hệ không được để trống")]
        public string EmailNguoiLienHe { get; set; }
        #endregion

    }

    public class BooleanAttribute : ValidationAttribute
    {
        public bool Value
        {
            get;
            set;
        }

        public override bool IsValid(object value)
        {
            return value != null && value is bool && (bool)value == Value;
        }
    }
}